package codes

import (
	"fmt"
)

const (
	moduleRMS         = 0x01
	subModuleCore     = 0x01
	subModuleRobot    = 0x02
	subModuleTraffic  = 0x03
	subModuleTask     = 0x04
	subModuleCharge   = 0x05
	subModuleDevice   = 0x06
	subModuleTemplate = 0x07
	subModuleUser     = 0x08
	subModuleLocation = 0x09
)

var (
	ErrRobotIDExists         = New(Error, moduleRMS, subModuleRobot, 0x01, "机器人编号已存在")                      //机器人编号已存在
	ErrRobotTypeExists       = New(Error, moduleRMS, subModuleRobot, 0x02, "机器人型号已存在")                      //机器人型号已存在
	ErrRobotTypeNotExist     = New(Error, moduleRMS, subModuleRobot, 0x03, "机器人型号不存在")                      //机器人型号不存在
	ErrRobotNotExists        = New(Error, moduleRMS, subModuleRobot, 0x04, "机器人不存在")                        //机器人不存在
	ErrRobotDisable          = New(Error, moduleRMS, subModuleRobot, 0x05, "机器人已禁用")                        //机器人已禁用
	ErrRobotOperate          = New(Error, moduleRMS, subModuleRobot, 0x06, "操作机器人失败")                       //操作机器人失败
	ErrRobotIsRunningTask    = New(Error, moduleRMS, subModuleRobot, 0x07, "机器人任务中")                        //机器人任务中
	ErrRobotOffse            = New(Warn, moduleRMS, subModuleRobot, 0x08, "机器人角度或距离偏差大")                    //机器人角度或距离偏差大
	ErrRobotStatusNotMatch   = New(Error, moduleRMS, subModuleRobot, 0x09, "机器人状态不匹配")                      //机器人状态不匹配
	ErrMapInRobots           = New(Error, moduleRMS, subModuleRobot, 0x0A, "地图删除不允许，请先修改机器人分组信息,并把机器人移除地图") //地图删除不允许，请先修改机器人分组信息
	ErrRobotDisableCharge    = New(Error, moduleRMS, subModuleRobot, 0x0B, "机器人自动充电关闭")                     //机器人自动充电关闭
	ErrRobotGroupExists      = New(Error, moduleRMS, subModuleRobot, 0x0C, "机器人分组已存在")                      //机器人分组已存在
	ErrRobotGroupNotExists   = New(Error, moduleRMS, subModuleRobot, 0x0D, "机器人分组不存在")                      //机器人分组不存在
	ErrRobotGroupIdError     = New(Error, moduleRMS, subModuleRobot, 0x0E, "机器人分组id错误")                     //机器人分组id错误
	ErrRobotGroupMapNOExists = New(Error, moduleRMS, subModuleRobot, 0x0F, "机器人分组不含此地图")                    //机器人分组不含地图
	ErrRobotClientDriver     = New(Error, moduleRMS, subModuleRobot, 0x10, "机器人Gprc驱动错误")                   //机器人GPRC 客户端错误
	ErrRobotStatusNotExists  = New(Error, moduleRMS, subModuleRobot, 0x11, "机器人状态不存在")                      //机器人状态不存在

	ErrMapNotFound                = New(Error, moduleRMS, subModuleTraffic, 0x01, "地图不存在")                   //地图不存在
	ErrMapNodeNotFound            = New(Error, moduleRMS, subModuleTraffic, 0x02, "地图节点不存在")                 //地图节点不存在
	ErrPathPlanError              = New(Error, moduleRMS, subModuleTraffic, 0x03, "路径规划失败：规划错误")             //路径规划失败：规划错误
	ErrPathPlanNoGlobalPath       = New(Error, moduleRMS, subModuleTraffic, 0x04, "路径规划失败：无全局路径")            //路径规划失败：无全局路径
	ErrGlobalTransmitPathNotFound = New(Warn, moduleRMS, subModuleTraffic, 0x05, "路径规划失败：无全局路径及中转路径")        //路径规划失败：无全局路径及中转路径
	ErrLocalTransmitPathNotFound  = New(Warn, moduleRMS, subModuleTraffic, 0x06, "路径规划失败：中转路径无局部路径")         //路径规划失败：中转路径无局部路径
	ErrPathPlanNoLocalPath        = New(Error, moduleRMS, subModuleTraffic, 0x07, "路径规划失败：无局部路径")            //路径规划失败：无局部路径
	ErrGlobalPathNotFound         = New(Error, moduleRMS, subModuleTraffic, 0x08, "全局路径不存在")                 //全局路径不存在
	ErrLocalPathNotFound          = New(Error, moduleRMS, subModuleTraffic, 0x09, "局部路径不存在")                 //局部路径不存在
	ErrPathNotMatch               = New(Error, moduleRMS, subModuleTraffic, 0x0A, "路径不匹配")                   //路径不匹配
	ErrRobotStandByNodeNotFound   = New(Warn, moduleRMS, subModuleTraffic, 0x0B, "机器人待命点不存在")                //机器人待命点不存在
	ErrRobotStandByNodeExists     = New(Warn, moduleRMS, subModuleTraffic, 0x0C, "机器人厂区待命点已存在")              //机器人厂区待命点已存在
	ErrChargerNotFound            = New(Warn, moduleRMS, subModuleTraffic, 0x0D, "充电桩不存在")                   //充电桩不存在
	ErrChargeNodeExists           = New(Warn, moduleRMS, subModuleTraffic, 0x0E, "充电点已存在")                   //充电点已存在
	ErrLockConflict               = New(Warn, moduleRMS, subModuleTraffic, 0x0F, "锁定点冲突")                    //锁定点冲突
	ErrNodeLocked                 = New(Warn, moduleRMS, subModuleTraffic, 0x10, "点位已锁定")                    //点位已锁定
	ErrNodeIsSpecial              = New(Warn, moduleRMS, subModuleTraffic, 0x11, "点位为特殊点位")                  //点位为特殊点位
	ErrNoBlockPath                = New(Warn, moduleRMS, subModuleTraffic, 0x12, "无堵塞解除路径")                  //点位为特殊点位
	ErrAlreadyInTransmitPoint     = New(Warn, moduleRMS, subModuleTraffic, 0x13, "已经达到中转点")                  //点位为特殊点位
	ErrMapExists                  = New(Error, moduleRMS, subModuleTraffic, 0x14, "地图已存在")                   //地图已存在
	ErrMapNameNotMatch            = New(Error, moduleRMS, subModuleTraffic, 0x15, "地图MapName不匹配")            //地图MapName不匹配
	ErrProjectNamesIsNull         = New(Error, moduleRMS, subModuleTraffic, 0x16, "工程列表数据为空")                //工程列表为空
	ErrProjectMapsIsNull          = New(Error, moduleRMS, subModuleTraffic, 0x17, "工程地图数据列表为空")              //工程地图数据列表为空
	ErrMapNodeIllegal             = New(Error, moduleRMS, subModuleTraffic, 0x18, "地图节点不存在或者绘制不合理")          //地图节点不存在
	ErrMapInElevators             = New(Error, moduleRMS, subModuleTraffic, 0x19, "地图删除不允许，请先修改电梯信息")        //地图节点不存在
	ErrMapSameDevice              = New(Error, moduleRMS, subModuleTraffic, 0x1A, "地图中存在相同设备编号")             //地图节点不存在
	ErrCallDevice                 = New(Error, moduleRMS, subModuleTraffic, 0x1B, "设备正在处理，不予避让")             //地图节点不存在
	ErrSwitchLength               = New(Error, moduleRMS, subModuleTraffic, 0x1C, "切换点连接路径长度至少是车长的两倍")       //地图节点不存在
	ErrChargeLocked               = New(Warn, moduleRMS, subModuleTraffic, 0x1D, "充电点已锁定")                   //充电点已锁定
	ErrMapConvert                 = New(Error, moduleRMS, subModuleTraffic, 0x1E, "地图转换失败")                  //地图转换失败
	ErrChargerStatusNotMatch      = New(Warn, moduleRMS, subModuleTraffic, 0x1D, "充电点状态不匹配")                 //充电点状态不匹配
	ErrSameFloor                  = New(Error, moduleRMS, subModuleTraffic, 0x1F, "跨楼层地图楼层不应相同")             //地图节点不存在
	ErrCantRotate                 = New(Error, moduleRMS, subModuleTraffic, 0x20, "路径规划失败：两侧均无法旋转")          //地图节点不存在
	ErrRelationPointAlreadyExists = New(Error, moduleRMS, subModuleTraffic, 0x21, "已存在相同的厂区切换点")             //已存在相同的厂区切换点
	ErrStandbySiteNotFound        = New(Error, moduleRMS, subModuleTraffic, 0x22, "待命点不存在")                  //待命点不存在
	ErrLockAreaCmdErr             = New(Error, moduleRMS, subModuleTraffic, 0x23, "操作第三方交互区域指令码错误！！！")       //操作第三方交互区指令码错误
	ErrPlanerNotExit              = New(Error, moduleRMS, subModuleTraffic, 0x24, "地图规划器不存在！！！")             //地图规划器不存在
	ErrTargerNotReachable         = New(Error, moduleRMS, subModuleTraffic, 0x25, "目标点不不可达！！！")              //地图规划器不存在
	ErrAlreadyLocakedArea         = New(Error, moduleRMS, subModuleTraffic, 0x26, "第三方交互区域已锁")               //第三方交互区域已经锁定过了
	ErrDoingLocalPlan             = New(Error, moduleRMS, subModuleTraffic, 0x27, "局部路径正在规划，不可锁定第三方交互区域！！！") //局部路径正在规划，不可锁定第三方交互区域
	ErrlowTimeInterval            = New(Error, moduleRMS, subModuleTraffic, 0x28, "请求区域时间太短！！！")             //请求区域时间太短

	ErrTaskStart                  = New(Error, moduleRMS, subModuleTask, 0x01, "任务设置启动失败")    //任务设置启动失败
	ErrTaskStatusNotMatch         = New(Error, moduleRMS, subModuleTask, 0x02, "任务状态不匹配")     //任务状态不匹配
	ErrTaskNotExists              = New(Error, moduleRMS, subModuleTask, 0x03, "任务不存在")       //任务不存在
	ErrTaskExists                 = New(Error, moduleRMS, subModuleTask, 0x04, "任务已存在")       //任务已存在
	ErrActionTaskExists           = New(Error, moduleRMS, subModuleTask, 0x05, "任务存在,该操作不允许") //任务已存在
	ErrGoToDeadWay                = New(Error, moduleRMS, subModuleTask, 0x08, "死胡同区域不可达")    //任务已存在
	ErrFreeAvoidCanceld           = New(Error, moduleRMS, subModuleTask, 0x09, "空闲避让取消失败")    //空闲避让取消失败
	ErrTaskNotAllowForceCompleted = New(Error, moduleRMS, subModuleTask, 0x0B, "任务不允许强制完成")   //任务不存在
	ErrTaskTargetId               = New(Error, moduleRMS, subModuleTask, 0x0C, "任务目标点不存在")    //任务目标点不存在

	ErrTemplateNotExists     = New(Error, moduleRMS, subModuleTemplate, 0x01, "任务模板不存在")     //任务模板不存在
	ErrTemplateNotMatch      = New(Error, moduleRMS, subModuleTemplate, 0x02, "任务模板不匹配")     //任务模板不匹配
	ErrTemplateGetError      = New(Error, moduleRMS, subModuleTemplate, 0x03, "任务模板获取失败")    //任务模板获取失败
	ErrSubtaskError          = New(Error, moduleRMS, subModuleTemplate, 0x06, "任务模板获取失败")    //任务模板获取失败
	ErrSubtaskTemplateIsNull = New(Error, moduleRMS, subModuleTemplate, 0x07, "批量插入子模板数据为空") //批量插入子模板数据为空
	ErrSubtasksIsNull        = New(Error, moduleRMS, subModuleTemplate, 0x0A, "模板生成的子任务数为空") //批量插入子模板数据为空

	ErrStartChargeTimeout  = New(Error, moduleRMS, subModuleCharge, 0x01, "启动充电超时") //启动充电超时
	ErrFinishChargeTimeout = New(Error, moduleRMS, subModuleCharge, 0x02, "结束充电超时") //结束充电超时

	ErrExistGroupInCurrentMap = New(Error, moduleRMS, subModuleLocation, 0x01, "当前地堆库组在该地图已经存在") //当前地堆库组在该地图已经存在
	ErrNotExistLocationGroup  = New(Error, moduleRMS, subModuleLocation, 0x02, "该点不在该地图的地堆库中")   //该点不存在的地堆库

	ErrDeviceNotExists              = New(Error, moduleRMS, subModuleDevice, 0x01, "设备不存在")                    //设备不存在
	ErrDeviceNotOnline              = New(Error, moduleRMS, subModuleDevice, 0x02, "设备不在线")                    //设备不在线
	ErrDeviceNotEnable              = New(Error, moduleRMS, subModuleDevice, 0x03, "设备未使能")                    //设备未使能
	ErrDeviceStatusNotMatch         = New(Error, moduleRMS, subModuleDevice, 0x04, "设备状态未匹配")                  //设备状态未匹配
	ErrDeviceStatusNotExists        = New(Error, moduleRMS, subModuleDevice, 0x05, "设备状态不存在")                  //设备状态不存在
	ErrRelationSameMap              = New(Error, moduleRMS, subModuleDevice, 0x06, "区域关系地图不允许相同")              //设备状态不存在
	ErrDoorNotExists                = New(Error, moduleRMS, subModuleDevice, 0x07, "移动门数据不存在")                 //移动门状态不存在
	ErrElevatorOccupied             = New(Error, moduleRMS, subModuleDevice, 0x08, "电梯被占用，无法操作")               //移动门状态不存在
	ErrSwitchOccupied               = New(Error, moduleRMS, subModuleDevice, 0x09, "区域切换点被占用")                 //移动门状态不存在
	ErrDeviceExists                 = New(Error, moduleRMS, subModuleDevice, 0x0A, "设备已存在")                    //设备不存在
	ErrFactoryRelationMapsIsNull    = New(Error, moduleRMS, subModuleDevice, 0x0B, "厂区关联数据为空")                 //区域关联为空
	ErrDeviceNotSupport             = New(Error, moduleRMS, subModuleDevice, 0x0C, "设备状态不支持")                  //设备状态不支持
	ErrDevicePlatFormWightDotIsNull = New(Error, moduleRMS, subModuleDevice, 0x0D, "所有的称重平台点为空")               //承重平台为空
	ErrNotCloseDoor                 = New(Error, moduleRMS, subModuleDevice, 0x0E, "因为小车定位丢失或者小车当前点在自动们不允许关门") //因为小车定位丢失或者小车当前点在自动们不允许关门

	ErrWebsockets          = New(Error, moduleRMS, subModuleCore, 0x01, "请求类型不是Websockets") //连接不是websockets类型
	ErrWebsocketsUpgrade   = New(Error, moduleRMS, subModuleCore, 0x02, "Websockets升级失败")   //websockets错误
	ErrInvalidParams       = New(Error, moduleRMS, subModuleCore, 0x03, "输入参数错误")           //输入参数错误
	ErrGetHTTPBodyFailed   = New(Error, moduleRMS, subModuleCore, 0x04, "获得http body错误")    //http body解析错误
	ErrDatabase            = New(Error, moduleRMS, subModuleCore, 0x05, "数据库错误")            //数据库操作错误
	ErrCallService         = New(Error, moduleRMS, subModuleCore, 0x06, "GRPC调用错误")         //调用服务错误
	ErrWrongRequestVersion = New(Error, moduleRMS, subModuleCore, 0x07, "请求版本错误")           //调用服务错误
	ErrMapPlanerNotFound   = New(Error, moduleRMS, subModuleCore, 0x08, "指定地图路径规划器不存在")     //指定地图路径规划器不存在
	ErrMakeHttpRequest     = New(Error, moduleRMS, subModuleCore, 0x09, "生成http请求错误")       //生成http请求错误
	ErrDoHttpRequest       = New(Error, moduleRMS, subModuleCore, 0x0A, "执行http请求错误")       //执行http请求错误
	ErrCache               = New(Error, moduleRMS, subModuleCore, 0x0B, "缓存错误")             //数据库操作错误

	ErrExitUserAccount    = New(Error, moduleRMS, subModuleUser, 0x01, "已经存在的用户帐号") //存在用户帐号
	ErrUserPassWd         = New(Error, moduleRMS, subModuleUser, 0x02, "密码错误")      //存在用户帐号
	ErrNotExitUserAccount = New(Error, moduleRMS, subModuleUser, 0x03, "帐号错误")      //帐号错误
)

func printAllCodes() {
	for _, code := range AllCodes {
		fmt.Printf("0x%x\t|\t%d\t|\t%s\n", code.GetCode(), code.GetCode(), code.Error())
	}
}
